# IMPORTANDO BIBLIOTECAS
# IMPORT LIBRARY
import pandas as pd
import plotly.express as px
# IMPORTANDO BASE DE DADOS
# IMPORT DATABASE
df = pd.read_csv("telecom_users.csv")
display(df)
| Unnamed: 0 | IDCliente | Genero | Aposentado | Casado | Dependentes | MesesComoCliente | ServicoTelefone | MultiplasLinhas | ServicoInternet | ... | ServicoSuporteTecnico | ServicoStreamingTV | ServicoFilmes | TipoContrato | FaturaDigital | FormaPagamento | ValorMensal | TotalGasto | Churn | Codigo | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 1869 | 7010-BRBUU | Masculino | 0 | Sim | Sim | 72 | Sim | Sim | Nao | ... | SemInternet | SemInternet | SemInternet | 2 anos | Nao | CartaoCredito | 24.10 | 1734.65 | Nao | NaN |
| 1 | 4528 | 9688-YGXVR | Feminino | 0 | Nao | Nao | 44 | Sim | Nao | Fibra | ... | Nao | Sim | Nao | Mensal | Sim | CartaoCredito | 88.15 | 3973.2 | Nao | NaN |
| 2 | 6344 | 9286-DOJGF | Feminino | 1 | Sim | Nao | 38 | Sim | Sim | Fibra | ... | Nao | Nao | Nao | Mensal | Sim | DebitoAutomatico | 74.95 | 2869.85 | Sim | NaN |
| 3 | 6739 | 6994-KERXL | Masculino | 0 | Nao | Nao | 4 | Sim | Nao | DSL | ... | Nao | Nao | Sim | Mensal | Sim | BoletoEletronico | 55.90 | 238.5 | Nao | NaN |
| 4 | 432 | 2181-UAESM | Masculino | 0 | Nao | Nao | 2 | Sim | Nao | DSL | ... | Nao | Nao | Nao | Mensal | Nao | BoletoEletronico | 53.45 | 119.5 | Nao | NaN |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 5981 | 3772 | 0684-AOSIH | Masculino | 0 | Sim | Nao | 1 | Sim | Nao | Fibra | ... | Nao | Sim | Sim | Mensal | Sim | BoletoEletronico | 95.00 | 95 | Sim | NaN |
| 5982 | 5191 | 5982-PSMKW | Feminino | 0 | Sim | Sim | 23 | Sim | Sim | DSL | ... | Sim | Sim | Sim | 2 anos | Sim | CartaoCredito | 91.10 | 2198.3 | Nao | NaN |
| 5983 | 5226 | 8044-BGWPI | Masculino | 0 | Sim | Sim | 12 | Sim | Nao | Nao | ... | SemInternet | SemInternet | SemInternet | Mensal | Sim | BoletoEletronico | 21.15 | 306.05 | Nao | NaN |
| 5984 | 5390 | 7450-NWRTR | Masculino | 1 | Nao | Nao | 12 | Sim | Sim | Fibra | ... | Nao | Sim | Sim | Mensal | Sim | BoletoEletronico | 99.45 | 1200.15 | Sim | NaN |
| 5985 | 860 | 4795-UXVCJ | Masculino | 0 | Nao | Nao | 26 | Sim | Nao | Nao | ... | SemInternet | SemInternet | SemInternet | Anual | Nao | CartaoCredito | 19.80 | 457.3 | Nao | NaN |
5986 rows × 23 columns
# tratamento da base de dados
# database treatment
# axis = 0 _> linha ou axis = 1 _> coluna
# 1º limpeza
# 1º cleaning
df = df.drop(["Unnamed: 0", "Codigo"], axis=1)
# removendo colunas vazias:
# removing empty columns:
df = df.dropna(how="all", axis=1) # all remove se estiver todas linha ou coluna vazia
# removendo linhas vazias
# removing empty lines
df = df.dropna(how="any", axis=0) # any remove se tiver 1 ou mais vazios
# tratamento da base de dados
# 2º informações disponiveis
# 2 information availableprint(df.info())
print(df.info())
<class 'pandas.core.frame.DataFrame'> Int64Index: 5984 entries, 0 to 5985 Data columns (total 21 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 IDCliente 5984 non-null object 1 Genero 5984 non-null object 2 Aposentado 5984 non-null int64 3 Casado 5984 non-null object 4 Dependentes 5984 non-null object 5 MesesComoCliente 5984 non-null int64 6 ServicoTelefone 5984 non-null object 7 MultiplasLinhas 5984 non-null object 8 ServicoInternet 5984 non-null object 9 ServicoSegurancaOnline 5984 non-null object 10 ServicoBackupOnline 5984 non-null object 11 ProtecaoEquipamento 5984 non-null object 12 ServicoSuporteTecnico 5984 non-null object 13 ServicoStreamingTV 5984 non-null object 14 ServicoFilmes 5984 non-null object 15 TipoContrato 5984 non-null object 16 FaturaDigital 5984 non-null object 17 FormaPagamento 5984 non-null object 18 ValorMensal 5984 non-null float64 19 TotalGasto 5984 non-null object 20 Churn 5984 non-null object dtypes: float64(1), int64(2), object(18) memory usage: 1.0+ MB None
# Analise exploratoria de Churn
# Churn's exploratory analysis
print(df["Churn"].value_counts())
print(df["Churn"].value_counts(normalize=True).map("{:.1%}".format))
Nao 4397 Sim 1587 Name: Churn, dtype: int64 Nao 73.5% Sim 26.5% Name: Churn, dtype: object
# Alanise com graficos comparativos com Churn
# Alanise with comparative charts with Churn
for coluna in df.columns:
grafico = px.histogram(df, x=coluna, color="Churn", text_auto=True, color_discrete_sequence=["black", "red"])
grafico.show()
questão problema: Clientes com contrato mensal tem mais chance de cancelar, como mostra o histrograma de Tipo de cliente: ideia: Estudar e execultar propsota para captar cliente com plano anual, como ofertar de desconto do plano anual.
ideia: falimia maiores tendem a cancelar menos do que familia menores, propor uma promoção para numeros adionais.
questão problema: histrograma Meses como clientes mostra que uma grande parte de clientes com poucos meses de experiencia tendem a cancelar, o poblema pode ser no suporte da empresa ou na captação de clientes desqualificados. ideia: estudar os principais motivos de cancelamento para ir a fundo pois esses numeros estão representando uma grande parte do cancelamento.
ideia:QUanto mais serviços o cliente tem, menos chance dele cancelar, incetivar ofertas para clientes que ja tem algum tipo de plano, onde assim ira estender os serviços e faturamento.
ideia: Clientes no boleto tem MUITO mais chance de cancelar, então temos que fazer alguma ação para eles irem para as outras formas de pagamento
questão poblema: Tem alguma coisa no nosso serviço de Fibra que tá fazendo os clientes cancelarem.